home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / asmbler.arc / APPLY.ASM < prev    next >
Assembly Source File  |  1988-11-19  |  5KB  |  364 lines

  1.     PAGE    55,132
  2.     TITLE    QuadScreen APPLY program - Copyright 1983 Mathews Associates
  3.  
  4. BSIZE    EQU    27408              ; SIZE OF QSI.BIN FILE AS SHOWN
  5. ;                    ;      IN DISK DIRECTORY
  6. ;
  7. ;  OFFSETS INTO QSI.BIN IMAGE
  8. OXFONT    EQU    0764H-0100H        ; XFONT IN QSIMBED MODULE
  9. OYFONT    EQU    OXFONT+10H         ; YFONT IN QSIMBED MODULE
  10. OULINE    EQU    OYFONT+10H         ; ULINE IN QSIMBED MODULE
  11. OCHSETS    EQU    OULINE+10H         ; CHSETS IN QSIMBED MODULE
  12. OBSIZE    EQU    OCHSETS+20H        ; BSIZE IN QSIMBED MODULE
  13. OPLAST    EQU    016AH-0100H        ; PLAST IN INSTALL MODULE
  14.  
  15. ; General DOS invocation macro
  16.  
  17. DOS    MACRO    FNC,VAL,VBX,VCX,VDX,VSI,VDI
  18.     IFNB    <VDI>
  19.     MOV    DI,VDI
  20.     ENDIF
  21.     IFNB    <VSI>
  22.     MOV    SI,VSI
  23.     ENDIF
  24.     IFNB    <VDX>
  25.     MOV    DX,VDX
  26.     ENDIF
  27.     IFNB    <VCX>
  28.     MOV    CX,VCX
  29.     ENDIF
  30.     IFNB    <VBX>
  31.     MOV    BX,VBX
  32.     ENDIF
  33.     IFNB    <VAL>
  34.     MOV    AL,VAL
  35.     ENDIF
  36.     IFNB    <FNC>
  37.     MOV    AH,FNC
  38.     ENDIF
  39.     INT    33
  40.     ENDM
  41.  
  42. ; Print string macro
  43.  
  44. PRINT    MACRO    STR
  45.     DOS    9,,,,<OFFSET STR>
  46.     ENDM
  47.  
  48. ; Abort execution macro
  49.  
  50. HALT    MACRO
  51.     PRINT    FMSG
  52.     DOS    76,1
  53.     ENDM
  54.  
  55. DUMMY    SEGMENT
  56.  
  57. IMAGE    DB    65280 DUP (?)
  58.  
  59. DUMMY    ENDS
  60.  
  61. STACK    SEGMENT    STACK
  62.  
  63.     DW    4096 DUP (?)
  64.  
  65. STACK    ENDS
  66.  
  67. PSP    SEGMENT    AT 0
  68.  
  69.     ORG    080H
  70. INLEN    DB    ?
  71. INPUT    LABEL    BYTE
  72.  
  73. PSP    ENDS
  74.  
  75. APPLY    SEGMENT
  76.  
  77.     ASSUME    CS:APPLY,DS:PSP,ES:PSP
  78.  
  79. MAIN    PROC    NEAR
  80.     CALL    IDENT
  81.     CALL    LOAD
  82.     CALL    BUILD
  83.     CALL    SAVE
  84.     DOS    76,0
  85.  
  86. MAIN    ENDP
  87.  
  88. IMSG    DB    'Font installation program -'
  89.     DB    ' Copyright 1983 Mathews Associates',13,10,'$'
  90.  
  91. HMSG    DB    13,10,'APPLY should be used with a list'
  92.     DB    ' of font files to be installed into a',13,10
  93.     DB    'QuadScreen driver given in order'
  94.     DB    ' corresponding to mode number. I. e.',13,10
  95.     DB    'A>APPLY 12X20.STD+6X8.STD+7X9.STD'
  96.     DB    '+USER1.FON+USER2.FON ...',13,10
  97.     DB    'with a limit of sixteen fonts and'
  98.     DB    ' 64K total driver size. Font files may',13,10
  99.     DB    'be created and edited by FONTEDIT.',13,10,'$'
  100.  
  101. EMSG1    DB    'Cannot find file QSI.BIN$'
  102. EMSG2    DB    'Error opening file QSI.BIN$'
  103. EMSG3    DB    'File QSI.BIN is invalid$'
  104. EMSG4    DB    'Cannot find file $'
  105. EMSG5    DB    'Error opening file $'
  106. EMSG6    DB    'Invalid font file $'
  107. EMSG7    DB    'Address space overflow$'
  108. EMSG8    DB    'Cannot create file QSI.COM$'
  109.  
  110. FMSG    DB    ' - APPLY aborted.',13,10,'$'
  111.  
  112. INNAME    DB    'QSI.BIN',0
  113. OUTNAME    DB    'QSI.COM',0
  114.  
  115. NEWNAME    DB    64 DUP (?)
  116.  
  117. SEGPSP    DW    ?
  118.  
  119. XFONT    DB    ?
  120. YFONT    DB    ?
  121.  
  122. INDEX    DB    ?
  123. NEXTSI    DW    ?
  124. NEXTCX    DW    ?
  125.  
  126. TSIZE    DW    ?
  127. CSIZE    DW    ?
  128.  
  129. IDENT    PROC    NEAR
  130.     MOV    AX,CS
  131.     MOV    DS,AX
  132.     MOV    AX,ES
  133.     MOV    SEGPSP,AX
  134.  
  135.     ASSUME    DS:APPLY,ES:NOTHING
  136.  
  137.     PRINT    IMSG
  138.     RET
  139.  
  140. IDENT    ENDP
  141.  
  142. ; Load the file QSI.BIN into memory
  143.  
  144. LOAD    PROC    NEAR
  145.     DOS    61,0,,,<OFFSET INNAME>
  146.     JNC    LOAD2
  147.     CMP    AX,2
  148.     JNZ    LOAD1
  149.     PRINT    EMSG1
  150.     HALT
  151. LOAD1:
  152.     PRINT    EMSG2
  153.     HALT
  154. LOAD2:
  155.     PUSH    DS
  156.     MOV    DX,SEG DUMMY
  157.     MOV    DS,DX
  158.     XOR    DX,DX
  159.     DOS    63,,AX,BSIZE+1
  160.     POP    DS
  161.     JC    LOAD1
  162.     CMP    AX,BSIZE
  163.     JZ    LOAD3
  164.     PRINT    EMSG3
  165.     HALT
  166. LOAD3:
  167.     DOS    62
  168.     JC    LOAD1
  169.     MOV    AX,BSIZE
  170.     MOV    CSIZE,AX
  171.     RET
  172.  
  173. LOAD    ENDP
  174.  
  175. ; Attach the fonts given to memory image
  176.  
  177. BUILD    PROC    NEAR
  178.     MOV    AX,SEGPSP
  179.     MOV    DS,AX
  180.     MOV    AX,CS
  181.     MOV    ES,AX
  182.  
  183.     ASSUME    DS:PSP,ES:APPLY
  184.  
  185.     MOV    CL,INLEN
  186.     OR    CL,CL
  187.     JZ    BULD2
  188.     XOR    CH,CH
  189.     MOV    SI,OFFSET INPUT
  190. BULD1:
  191.     CLD
  192.     CMP    BYTE PTR [SI],' '
  193.     JNZ    BULD3
  194.     INC    SI
  195.     LOOP    BULD1
  196. BULD2:
  197.     MOV    AX,CS
  198.     MOV    DS,AX
  199.  
  200.     ASSUME    DS:APPLY
  201.  
  202.     PRINT    HMSG
  203.     DOS    76,1
  204.  
  205.     ASSUME    DS:PSP
  206.  
  207. BULD3:
  208.     MOV    DI,OFFSET NEWNAME
  209. BULD4:
  210.     CLD
  211.     LODSB
  212.     DEC    CX
  213.     CMP    AL,'+'
  214.     JZ    BULD5
  215.     STOSB
  216.     JCXZ    BULD5
  217.     JMP    BULD4
  218. BULD5:
  219.     MOV    BYTE PTR ES:[DI],0
  220.     MOV    AX,SEGPSP
  221.     MOV    ES,AX
  222.     MOV    AX,CS
  223.     MOV    DS,AX
  224.  
  225.     ASSUME    DS:APPLY,ES:PSP
  226.  
  227.     MOV    NEXTSI,SI
  228.     MOV    NEXTCX,CX
  229.     DOS    61,0,,,<OFFSET NEWNAME>
  230.     JNC    BULD7
  231.     CMP    AX,2
  232.     JNZ    BULD6
  233.     PRINT    EMSG4
  234.     CALL    PRNAME
  235.     HALT
  236. BULD6:
  237.     PRINT    EMSG5
  238.     CALL    PRNAME
  239.     HALT
  240. BULD7:
  241.     DOS    63,,AX,1,<OFFSET XFONT>
  242.     JNC    BULD9
  243.     CMP    AX,1
  244.     JZ    BULD9
  245. BULD8:
  246.     PRINT    EMSG6
  247.     CALL    PRNAME
  248.     HALT
  249. BULD9:
  250.     CMP    XFONT,32
  251.     JA    BULD8
  252.     DOS    63,,,1,<OFFSET YFONT>
  253.     JC    BULD8
  254.     CMP    AX,1
  255.     JNZ    BULD8
  256.     CMP    YFONT,32
  257.     JZ    BULD8
  258.     MOV    AL,XFONT
  259.     ADD    AL,7
  260.     MOV    CL,3
  261.     SHR    AL,CL
  262.     MUL    YFONT
  263.     MOV    AH,AL
  264.     XOR    AL,AL
  265.     MOV    TSIZE,AX
  266.     PUSH    DS
  267.     MOV    DX,CSIZE
  268.     MOV    CX,SEG DUMMY
  269.     MOV    DS,CX
  270.     DOS    63,,,AX
  271.     POP    DS
  272.     JC    BULD8
  273.     CMP    AX,TSIZE
  274.     JNZ    BULD8
  275.     MOV    AX,SEG DUMMY
  276.     MOV    ES,AX
  277.  
  278.     ASSUME    ES:DUMMY
  279.  
  280.     MOV    BL,INDEX
  281.     XOR    BH,BH
  282.     MOV    AL,XFONT
  283.     MOV    IMAGE[BX+OXFONT],AL
  284.     MOV    AL,YFONT
  285.     MOV    IMAGE[BX+OYFONT],AL
  286.     MOV    CL,16
  287.     MUL    CL
  288.     ADD    AX,12
  289.     MOV    CL,20
  290.     DIV    CL
  291.     MOV    IMAGE[BX+OULINE],AL
  292.     SHL    BX,1
  293.     MOV    AX,CSIZE
  294.     ADD    AX,0100H
  295.     MOV    WORD PTR IMAGE[BX+OCHSETS],AX
  296.     MOV    AX,TSIZE
  297.     MOV    WORD PTR IMAGE[BX+OBSIZE],AX
  298.     ADD    CSIZE,AX
  299.     JNC    BULD10
  300.     PRINT    EMSG7
  301.     HALT
  302. BULD10:
  303.     MOV    CX,NEXTCX
  304.     JCXZ    BULD11
  305.     INC    INDEX
  306.     MOV    SI,NEXTSI
  307.     MOV    AX,SEGPSP
  308.     MOV    DS,AX
  309.     MOV    AX,CS
  310.     MOV    ES,AX
  311.     JMP    BULD3
  312. BULD11:
  313.     MOV    AX,CSIZE
  314.     MOV    WORD PTR IMAGE+OPLAST,AX
  315.     RET
  316.  
  317.     ASSUME    ES:NOTHING
  318.  
  319. BUILD    ENDP
  320.  
  321. ; Save the file QSI.COM from memory
  322.  
  323. SAVE    PROC    NEAR
  324.     DOS    60,,,0,<OFFSET OUTNAME>
  325.     JNC    SAVE2
  326. SAVE1:
  327.     PRINT    EMSG8
  328.     HALT
  329. SAVE2:
  330.     PUSH    DS
  331.     MOV    CX,CSIZE
  332.     MOV    DX,SEG DUMMY
  333.     MOV    DS,DX
  334.     XOR    DX,DX
  335.     DOS    64,,AX
  336.     POP    DS
  337.     JC    SAVE1
  338.     DOS    62
  339.     JC    SAVE1
  340.     RET
  341.  
  342. SAVE    ENDP
  343.  
  344. PRNAME    PROC    NEAR
  345.     MOV    SI,OFFSET NEWNAME
  346. PRNM1:
  347.     CLD
  348.     LODSB
  349.     OR    AL,AL
  350.     JZ    PRNM2
  351.     MOV    DL,AL
  352.     PUSH    SI
  353.     DOS    2
  354.     POP    SI
  355.     JMP    PRNM1
  356. PRNM2:
  357.     RET
  358.  
  359. PRNAME    ENDP
  360.  
  361. APPLY    ENDS
  362.  
  363.     END    MAIN
  364.